# LuckPay Web Manage System
#
# Copyright (c) 2016 Lucky Byte, Inc.
#
get_rules = (form, type) ->
    rules = []

    # 逐行验证输入的有效性
    for item, index in form.find(".fields.rule.#{type}")
        continue if not $(item).is(':visible')

        fix = $(item).find('[name=fix]').val() is 'true'
        amt_max = parseFloat $(item).find('[name=amt_max]').val()
        fee = parseFloat $(item).find('[name=fee]').val()
        min = parseFloat $(item).find('[name=min]').val()
        max = parseFloat $(item).find('[name=max]').val()

        # 消费金额上限必须有效
        if isNaN amt_max
            alert "第 #{index + 1}  行的 消费金额上限 无效..."
            return null

        # 手续费必须有效
        if isNaN fee
            alert "第 #{index + 1}  行的 手续费 无效..."
            return null

        # 定额手续费收取不能超过消费金额
        if fix
            if amt_max > 0.0 and fee >= amt_max
                alert "第 #{index + 1}  行的 手续费 收取费用不能超出 消费金额上限..."
                return null
            # 固定额度时不需要保底和封顶金额
            min = 0.0
            max = 0.0
        else
            # 手续费收取比例不能超过 10%
            if fee > 10.0
                alert "第 #{index + 1}  行的 手续费 收取比例不允许超出 10%..."
                return null

            # 保底费用必须有效
            if isNaN min
                alert "第 #{index + 1}  行的 保底金额 无效..."
                return null

            # 保底费用不能大于消费金额
            if amt_max > 0 and min >= amt_max
                alert "第 #{index + 1}  行的 保底金额 不能大于或等于 消费金额上限..."
                return null

            # 封顶费用必须有效
            if isNaN max
                alert "第 #{index + 1}  行的 封顶金额 无效..."
                return null

            # 封顶费用不能大于消费金额
            if amt_max > 0 and min >= amt_max
                alert "第 #{index + 1}  行的 封顶金额 不能大于或等于 消费金额上限..."
                return null

            # 保底费用不能大于封顶费用
            if min > 0.0 and max > 0.0 and min > max
                alert "第 #{index + 1}  行的 保底金额 不能大于 封顶金额..."
                return null

        rules.push amt_max: amt_max, fix: fix, fee: fee, min: min, max: max
    return rules


$ ->
    form = $('form.main')
    form.form
        inline: true,
        fields:
            name: 'empty'

    form.find('i#add').click ->
        fields = $(this).parents('.fields')
        while true
            fields = $(fields).next('.fields.rule')
            if fields.length == 0
                alert('不能再增加更多行，已经达到上限')
                return
            if not $(fields).is(':visible')
                $(fields).show('fast')
                return
        alert('不能再增加更多行，已经达到上限')

    form.find('i#minus').click ->
        $(this).parents('.fields').hide('fast')

    # 当更改收取方式时，改变手续费的后缀提示
    form.find('.dropdown.fix').dropdown
        onChange: (value, text, $choice) ->
            if value is 'false'
                $(this).parent().next().find('.ui.label').text('%')
                $(this).parents('.fields').find('[name=min]').val('0')
                    .removeAttr('readonly')
                    .parent().removeClass('disabled')
                $(this).parents('.fields').find('[name=max]').val('0')
                    .removeAttr('readonly')
                    .parent().removeClass('disabled')
            else
                $(this).parent().next().find('.ui.label').text('元')
                $(this).parents('.fields').find('[name=min]').val('0')
                    .attr('readonly', 'readonly')
                    .parent().addClass('disabled')
                $(this).parents('.fields').find('[name=max]').val('0')
                    .attr('readonly', 'readonly')
                    .parent().addClass('disabled')

    # 恢复界面的值
    for type in [ 'debit', 'cedit' ]
        rules = form.form 'get value', "#{type}_rules"
        if rules.length > 0
            rules = JSON.parse rules
            form.form 'set value', "#{type}_rules", ""
            fields = form.find(".fields.rule.#{type}:first")
            for rule, index in rules
                fields.show()
                fields.find('.dropdown.fix').dropdown 'set selected', rule.fix
                fields.find('[name=amt_max]').val(rule.amt_max)
                fields.find('[name=fee]').val(rule.fee)
                fields.find('[name=min]').val(rule.min)
                fields.find('[name=max]').val(rule.max)
                fields = $(fields).next('.fields.rule')
                break if $(fields).length == 0

    # 提交前处理
    form.submit (evt) ->
        if not $(this).form('is valid')
            return evt.preventDefault()

        for type in [ 'debit', 'cedit' ]
            rules = get_rules form, type
            return evt.preventDefault() if not rules
            form.form 'set value', "#{type}_rules", JSON.stringify rules

        # 不用上送的数据
        form.find('input[name=amt_max]').attr('disabled', 'disabled')
        form.find('select[name=fix]').attr('disabled', 'disabled')
        form.find('input[name=fee]').attr('disabled', 'disabled')
        form.find('input[name=max]').attr('disabled', 'disabled')
        form.find('input[name=min]').attr('disabled', 'disabled')
